/**
 * 全局命令面板管理器
 * 确保整个页面只有一个命令面板显示，避免多个编辑器打开时出现重叠的命令面板
 */

class CommandPanelManager {
  constructor() {
    this.editors = new Set() // 存储所有注册的编辑器实例
    this.activeEditor = null // 当前显示命令面板的编辑器
  }

  /**
   * 注册编辑器实例
   * @param {Object} editorInstance - 编辑器实例对象，需要包含 hideCommandPanel 和 showCommandPanel 方法
   * @returns {boolean} - 如果这是第一个注册的编辑器，返回 true，表示应该显示命令面板
   */
  registerEditor(editorInstance) {
    if (!editorInstance) {
      console.warn('[CommandPanelManager] 尝试注册无效的编辑器实例')
      return false
    }

    this.editors.add(editorInstance)
    
    // 如果当前没有活动的编辑器，这个编辑器成为活动编辑器
    if (!this.activeEditor) {
      this.activeEditor = editorInstance
      return true // 返回 true 表示应该显示命令面板
    } else {
      // 已经有活动编辑器，隐藏这个编辑器的命令面板
      if (editorInstance.hideCommandPanel) {
        editorInstance.hideCommandPanel()
      }
      return false // 返回 false 表示应该隐藏命令面板
    }
  }

  /**
   * 注销编辑器实例
   * @param {Object} editorInstance - 要注销的编辑器实例
   */
  unregisterEditor(editorInstance) {
    if (!editorInstance) {
      return
    }

    const wasActive = this.activeEditor === editorInstance
    this.editors.delete(editorInstance)

    // 如果注销的是活动编辑器，需要激活下一个编辑器
    if (wasActive) {
      this.activeEditor = null
      
      // 查找下一个可用的编辑器
      if (this.editors.size > 0) {
        // 获取第一个可用的编辑器
        const nextEditor = Array.from(this.editors)[0]
        this.activeEditor = nextEditor
        
        // 显示下一个编辑器的命令面板
        // 注意：由于使用了计算属性，这里调用 showCommandPanel 主要是为了触发响应式更新
        if (nextEditor.showCommandPanel) {
          nextEditor.showCommandPanel()
        }
      }
    }
  }

  /**
   * 获取当前活动编辑器
   * @returns {Object|null} - 当前活动编辑器实例
   */
  getActiveEditor() {
    return this.activeEditor
  }

  /**
   * 检查指定编辑器是否是活动编辑器
   * @param {Object} editorInstance - 要检查的编辑器实例
   * @returns {boolean} - 是否是活动编辑器
   */
  isActiveEditor(editorInstance) {
    return this.activeEditor === editorInstance
  }

  /**
   * 获取已注册的编辑器数量
   * @returns {number} - 编辑器数量
   */
  getEditorCount() {
    return this.editors.size
  }

  /**
   * 清除所有注册的编辑器（用于清理）
   */
  clear() {
    this.editors.clear()
    this.activeEditor = null
  }
}

// 创建全局单例
const commandPanelManager = new CommandPanelManager()

export default commandPanelManager

